package com.hspedu.furn.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hspedu.furn.bean.Furn;
import com.hspedu.furn.bean.Mes;
import com.hspedu.furn.service.FurnService;
import org.springframework.stereotype.Controller;
import org.springframework.validation.Errors;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;

/**
 * @Author 梁科
 * @Version 1.0
 * @ Date 2025/9/24 17:37
 */
@Controller
@ResponseBody       // 以json格式发送给前端
public class FurnController {
    @Resource               // 注入furnService
    private FurnService furnService;

    @PostMapping(value = "/save")
    // @Valid对前端传来的参数进行后台验证,并把错误信息赋值给errors
    public Mes save(@Valid @RequestBody Furn furn, Errors errors) {   // 增加家居信息到数据库
        List<FieldError> fieldErrors = errors.getFieldErrors();// 获取所有字段的错误信息
        // 将错误信息放在map中 key=属性名 value=该属性对应的错误信息
        HashMap<String, Object> errorMes = new HashMap<>();
        for (FieldError error : fieldErrors) {
            errorMes.put(error.getField(), error.getDefaultMessage());
        }
        System.out.println(errorMes);
        if (!errorMes.isEmpty()) {      // 验证不通过
            Mes fail = Mes.fail().add("errorMes", errorMes);
            return fail;
        } else {        // 验证成功
            furnService.save(furn);     // 将家居信息保存到数据库
            Mes success = Mes.success();
            return success;
        }
    }

    @RequestMapping(value = "/selectAllFurn")
    public Mes selectAllFurn() {             // 显示所有家居
        List<Furn> furns = furnService.selectAllFurn();
        Mes success = Mes.success();
        Mes mes = success.add("furns", furns);
        return mes;
    }

    @PutMapping(value = "/update")
    public Mes update(@RequestBody Furn furn) {           // 根据id更新家居
        furnService.update(furn);
        Mes success = Mes.success();
        return success;
    }

    @DeleteMapping(value = "/delete/{id}")
    public Mes delete(@PathVariable(value = "id") Integer id) {             // 根据id删除家居
        furnService.delete(id);
        Mes success = Mes.success();
        return success;
    }

    /**
     * 分页显示所有家居
     *
     * @param pageNum  当前页码
     * @param pageSize 每页显示的记录数
     * @return
     */
    @GetMapping(value = "/listByPage")
    public Mes listByPage(@RequestParam(defaultValue = "1") Integer pageNum,
                          @RequestParam(defaultValue = "5") Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);     // 初始化分页参数
        List<Furn> furns = furnService.selectAllFurn(); // 底层会根据分页参数进行分页查询
        PageInfo pageInfo = new PageInfo(furns);    // 将分页查询后的结果传给pageInfo对象
        Mes mes = Mes.success().add("pageInfo", pageInfo);    // 封装为Mes对象返回给前端
        return mes;
    }

    /**
     * @param pageNum  当前页码
     * @param pageSize 每页的记录数
     * @param search   搜索框输入的家居名
     * @return
     */
    @GetMapping(value = "/listByConditionPage")
    public Mes listByConditionPage(@RequestParam(defaultValue = "1") Integer pageNum,
                                   @RequestParam(defaultValue = "5") Integer pageSize,
                                   @RequestParam(defaultValue = "") String search) {
        PageHelper.startPage(pageNum, pageSize); //设置分页参数
        List<Furn> furns = furnService.selectAllByName(search); // 根据分页参数进行查询
        PageInfo pageInfo = new PageInfo(furns);    // 把查询到的数据封装到pageInfo中
        Mes mes = Mes.success().add("pageInfo", pageInfo);
        return mes;
    }
}
